package com.hunan.yllxy.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    /**
     * Docket
     */
    @Bean
    public Docket docket(Environment environment) {
//        Profiles profiles = Profiles.of("dev");
//        boolean flag = environment.acceptsProfiles(profiles);
        boolean flag = true;
        // 构造函数传入初始化规范，这是swagger2规范
        return new Docket(DocumentationType.SWAGGER_2)
//                .host("192.168.0.129:12301")
                //.pathMapping("/")
                // apiInfo：添加api的详情信息，参数为ApiInfo类型的参数，这个参数包含了基本描述信息：比如标题、描述、版本之类的，开发中一般都是自定义这些信息
                .apiInfo(apiInfo())
                // select、apis、paths、build 这四个是一组的，组合使用才能返回一个Docket实例对象，其中apis和paths是可选的。
                .select()
                // apis:添加过滤条件。RequestHandlerSelectors中有很多过滤方式；RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)：加了ApiOperation注解的类，生成接口文档
                //扫描com.qgs.controller包下的API交给Swagger2管理
                .apis(RequestHandlerSelectors.any())
//                .apis(RequestHandlerSelectors.basePackage("com.egis.changshadaqiapi.controller"))   //配置相应的控制类的包名
//                .paths(PathSelectors.any())
                // paths：控制那些路径的api会被显示出来。
                //.paths(PathSelecto1rs.any())
                .build()
                // 是否开启swagger 如果是false，浏览器将无法访问，默认是true
                .enable(flag).globalOperationParameters(this.getParameterList());
    }

    private List<Parameter> getParameterList() {
        List<Parameter> pars = new ArrayList<Parameter>();
        ParameterBuilder clientIdTicket = new ParameterBuilder();
        clientIdTicket.name("token").description("token令牌")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build(); //设置false，表示clientId参数 非必填,可传可不传！
        pars.add(clientIdTicket.build());
        ParameterBuilder clientIdTicket2 = new ParameterBuilder();
        clientIdTicket2.name("districtCode").description("区域代码")
                .defaultValue("changsha")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build(); //设置false，表示clientId参数 非必填,可传可不传！
        pars.add(clientIdTicket2.build());
        return pars;

    }

    /**
     * ApiInfo
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
//                .termsOfServiceUrl("127.0.0.1:12301")

                // 标题内容
                .title("API文档")
                // 描述内容
                .description("接口文档详情信息")
                // 版本
                .version("1.0")
                .build();
    }
}